package com.foftact.etfposition.mapper;

import com.foftact.etfposition.ETFBlock;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * ETF行业配置Mapper接口
 * 用于操作etfblock表
 */
@Mapper
public interface ETFBlockMapper {
    /**
     * 插入单条ETF行业配置数据
     * @param etfBlock ETF行业配置数据对象
     * @return 插入的行数
     */
    int insert(ETFBlock etfBlock);

    /**
     * 批量插入ETF行业配置数据
     * @param etfBlocks ETF行业配置数据列表
     * @return 插入的行数
     */
    int batchInsert(@Param("list") List<ETFBlock> etfBlocks);

    /**
     * 根据板块代码和报告日期查询ETF行业配置数据
     * @param blockCode 板块代码
     * @param reportDate 报告日期
     * @return ETF行业配置数据对象
     */
    ETFBlock selectByBlockCodeAndReportDate(@Param("blockCode") String blockCode, @Param("reportDate") Date reportDate);

    /**
     * 根据报告日期查询ETF行业配置数据列表
     * @param reportDate 报告日期
     * @return ETF行业配置数据列表
     */
    List<ETFBlock> selectByReportDate(Date reportDate);

    /**
     * 查询指定日期范围内的ETF行业配置数据
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return ETF行业配置数据列表
     */
    List<ETFBlock> selectByDateRange(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 查询所有ETF行业配置数据
     * @return ETF行业配置数据列表
     */
    List<ETFBlock> selectAll();

    /**
     * 根据板块代码和报告日期更新ETF行业配置数据
     * @param etfBlock ETF行业配置数据对象
     * @return 更新的行数
     */
    int updateByBlockCodeAndReportDate(ETFBlock etfBlock);

    /**
     * 插入或更新ETF行业配置数据
     * @param etfBlock ETF行业配置数据对象
     * @return 操作的行数
     */
    int insertOrUpdate(ETFBlock etfBlock);

    /**
     * 删除超过指定天数的数据
     * @param days 天数
     * @return 删除的行数
     */
    int deleteOldData(@Param("days") int days);

    /**
     * 执行基金行业配置统计查询
     * @param reportDate 报告日期
     * @return 统计结果列表
     */
    List<ETFBlock> calculateBlockRatio(@Param("reportDate") Date reportDate);
}